/*
 * Copyright 2010 - 2011, The PLDesktop Development Team
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License as published by the Free Software Foundation; either
 *  version 2.1 of the License, or (at your option) any later version.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 *  Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 *
 */
#ifndef PLELF_HEADER_ENUMS_H
#define PLELF_HEADER_ENUMS_H

namespace PLSDK {

/**
 * Enum values of the elf header that are used in both 32 bit and 64 bit header.
 */
class PLELFHeaderEnums {
public:
	/**
	 * Constructor.
	 */
	PLELFHeaderEnums();
	/**
	 * The file types.
	 */
	enum EType {
		/**
		 * No file type.
		 */
		EType_None				= 0,
		/**
		 * Relocatable file.
		 */
		EType_Relocatable		= 1,
		/**
		 * Executable file.
		 */
		EType_Executable		= 2,
		/**
		 * Shared object file.
		 */
		EType_SharedObject      = 3,
		/**
		 * Core file.
		 */
		EType_Core				= 4,
		/**
		 * Operating system-specific.
		 */
		EType_OSSpec0			= 0xfe00,
		/**
		 * Operating system-specific.
		 */
		EType_OSSpec1			= 0xfeff,
		/**
		 * Processor-specific.
		 */
		EType_ProcessorSpec0	= 0xff00,
		/**
		 * Processor-specific.
		 */
		EType_ProcessorSpec1	= 0xffff
	};
	/**
	 * The machine format of the elf data.
	 */
	enum EMachine {
		/**
		 * No machine.
		 */
		EMachine_None			= 0,
		/**
		 * AT&T WE 32100.
		 */
		EMachine_M32			= 1,
		/**
		 * SPARC.
		 */
		EMachine_Sparc			= 2,
		/**
		 * Intel 80386.
		 */
		EMachine_386			= 3,
		/**
		 * Motorola 68000.
		 */
		EMachine_68K			= 4,
		/**
		 * Motorola 88000.
		 */
		EMachine_88K			= 5,
		/**
		 * Intel 80860.
		 */
		EMachine_860			= 7,
		/**
		 * MIPS I Architecture (MIPS RS3000).
		 */
		EMachine_Mips			= 8,
		/**
		 * IBM System/370 Processor.
		 */
		EMachine_S370			= 9,
		/**
		 * MIPS RS3000 Little-endian.
		 */
		EMachine_MipsRS3_LE	= 10,
		/**
		 * Hewlett-Packard PA-RISC.
		 */
		EMachine_Parisc		= 15,
		/**
		 * Fujitsu VPP500.
		 */
		EMachine_VPP500		= 17,
		/**
		 * Enhanced instruction set SPARC.
		 */
		EMachine_Sparc32Plus	= 18,
		/**
		 * Intel 80960.
		 */
		EMachine_960			= 19,
		/**
		 * PowerPC.
		 */
		EMachine_PPC			= 20,
		/**
		 * 64-bit PowerPC.
		 */
		EMachine_PPC64			= 21,
		/**
		 * NEC V800.
		 */
		EMachine_V800			= 36,
		/**
		 * Fujitsu FR20.
		 */
		EMachine_FR20			= 37,
		/**
		 * TRW RH-32.
		 */
		EMachine_RH32			= 38,
		/**
		 * Motorola RCE.
		 */
		EMachine_RCE			= 39,
		/**
		 * Advanced RISC Machines ARM.
		 */
		EMachine_ARM			= 40,
		/**
		 * Digital Alpha.
		 */
		EMachine_ALPHA			= 41,
		/**
		 * Hitachi SH.
		 */
		EMachine_SH				= 42,
		/**
		 * SPARC Version 9.
		 */
		EMachine_SparcV9		= 43,
		/**
		 * Siemens Tricore embedded processor.
		 */
		EMachine_TriCore		= 44,
		/**
		 * Argonaut RISC Core, Argonaut Technologies Inc.
		 */
		EMachine_ARC			= 45,
		/**
		 * Hitachi H8/300.
		 */
		EMachine_H8_300		= 46,
		/**
		 * Hitachi H8/300H.
		 */
		EMachine_H8_300H		= 47,
		/**
		 * Hitachi H8S.
		 */
		EMachine_H8S			= 48,
		/**
		 * Hitachi H8/500.
		 */
		EMachine_H8_500		= 49,
		/**
		 * Intel IA-64 processor architecture.
		 */
		EMachine_IA64			= 50,
		/**
		 * Stanford MIPS-X.
		 */
		EMachine_MipsX			= 51,
		/**
		 * Motorola ColdFire.
		 */
		EMachine_Coldfire		= 52,
		/**
		 * Motorola M68HC12.
		 */
		EMachine_68HC12		= 53,
		/**
		 * Fujitsu MMA Multimedia Accelerator.
		 */
		EMachine_MMA			= 54,
		/**
		 * Siemens PCP.
		 */
		EMachine_PCP			= 55,
		/**
		 * Sony nCPU embedded RISC processor.
		 */
		EMachine_NCPU			= 56,
		/**
		 * Denso NDR1 microprocessor.
		 */
		EMachine_NDR1			= 57,
		/**
		 * Motorola Star*Core processor.
		 */
		EMachine_StarCore		= 58,
		/**
		 * Toyota ME16 processor.
		 */
		EMachine_ME16			= 59,
		/**
		 * STMicroelectronics ST100 processor.
		 */
		EMachine_ST100			= 60,
		/**
		 * Advanced Logic Corp. TinyJ embedded processor family.
		 */
		EMachine_TinyJ			= 61,
		/**
		 * Siemens FX66 microcontroller.
		 */
		EMachine_FX66			= 66,
		/**
		 * STMicroelectronics ST9+ 8/16 bit microcontroller.
		 */
		EMachine_ST9Plus		= 67,
		/**
		 * STMicroelectronics ST7 8-bit microcontroller.
		 */
		EMachine_ST7			= 68,
		/**
		 * Motorola MC68HC16 Microcontroller.
		 */
		EMachine_68HC16		= 69,
		/**
		 * Motorola MC68HC11 Microcontroller.
		 */
		EMachine_68HC11		= 70,
		/**
		 * Motorola MC68HC08 Microcontroller.
		 */
		EMachine_68HC08		= 71,
		/**
		 * Motorola MC68HC05 Microcontroller.
		 */
		EMachine_68HC05		= 72,
		/**
		 * Silicon Graphics SVx.
		 */
		EMachine_SVX			= 73,
		/**
		 * STMicroelectronics ST19 8-bit microcontroller.
		 */
		EMachine_ST19			= 74,
		/**
		 * Digital VAX.
		 */
		EMachine_VAX			= 75,
		/**
		 * Axis Communications 32-bit embedded processor.
		 */
		EMachine_Cris			= 76,
		/**
		 * Infineon Technologies 32-bit embedded processor.
		 */
		EMachine_Javelin		= 77,
		/**
		 * Element 14 64-bit DSP Processor.
		 */
		EMachine_FirePath		= 78,
		/**
		 * LSI Logic 16-bit DSP Processor.
		 */
		EMachine_ZSP			= 79,
		/**
		 * Donald Knuth's educational 64-bit processor.
		 */
		EMachine_MMix			= 80,
		/**
		 * Harvard University machine-independent object files.
		 */
		EMachine_Huany			= 81,
		/**
		 * SiTera Prism.
		 */
		EMachine_Prism			= 82
	};
	/**
	 * The version of the elf format.
	 */
	enum EVersion {
		/**
		 * Invalid version.
		 */
		EVersion_None			= 0,
		/**
		 * Current version.
		 */
		EVersion_Current		= 1
	};
};

}

#endif
